Computerized devices control almost every aspect of our life—from writing documents to controlling traffic lights. However, computerized devices are bug-prone, and thus require a testing phase in which the bugs should be discovered. The cost of not discovering a bug may be enormous, as the consequences of the bug may be disastrous. For example, a bug may cause the injury of a person relying on the designated behavior of the computerized device, such as a medical device, a traffic light, or others. Additionally, a bug in a marketed product may be expensive to fix, as patching it may require call-back of devices from the market. Hence, many developers of computerized devices invest a substantial portion of the development cycle in discovering erroneous behaviors of the computerized device.
The testing phase is considered one of the most difficult tasks in designing a computerized device. Debugging is one of the most time consuming tasks of a software developer. Finding bugs and determining their root cause may require significant human and time resources. It is often the case that bugs exhibit unexpected behavior only a long time and many instructions after it was created, which makes discovering it much harder. Generally, as the software is more complex, debugging may take more time and may be more complex and involve more data. Debugging may become especially difficult when the software contains some form of parallel processing, for example software utilizing multiple threads, multiple processors, or the like.
If more efficient and productivity-enhancing tools become available, the faster and more efficient may the debugging process become.